/** * */ package org.nightlabs.jfire.reporting.trade.ui.articlecontainer.detail.action.print; import java.util.Collection; import java.util.Collections; import java.util.Locale; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.nightlabs.base.ui.table.AbstractTableComposite; import org.nightlabs.base.ui.table.TableLabelProvider; import org.nightlabs.eclipse.ui.dialog.ResizableTitleAreaDialog; import org.nightlabs.jfire.reporting.trade.ui.resource.Messages; /** * @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de --> * */ public class ArticleContainerReportLocaleDialog extends ResizableTitleAreaDialog { private static class Table extends AbstractTableComposite<Locale> { public Table(Composite parent) { super(parent, SWT.NONE); } @Override protected void createTableColumns(TableViewer tableViewer, org.eclipse.swt.widgets.Table table) { table.setHeaderVisible(false); } @Override protected void setTableProvider(TableViewer tableViewer) { tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new TableLabelProvider() { @Override public String getColumnText(Object element, int columnIdx) { if (element instanceof Locale) { return ((Locale) element).getDisplayName(Locale.getDefault()); } return String.valueOf(element); } }); } } private Collection<Locale> locales; private Table localesTable; private Locale selectedLocale; /** * @param shell * @param resourceBundle */ public ArticleContainerReportLocaleDialog(Shell shell, Collection<Locale> locales) { super(shell, null); this.locales = locales; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.getString("org.nightlabs.jfire.reporting.trade.ui.articlecontainer.detail.action.print.ArticleContainerReportLocaleDialog.shellText")); //$NON-NLS-1$ } @Override protected Control createDialogArea(Composite parent) { setTitle(Messages.getString("org.nightlabs.jfire.reporting.trade.ui.articlecontainer.detail.action.print.ArticleContainerReportLocaleDialog.dialogTitle")); //$NON-NLS-1$ setMessage(Messages.getString("org.nightlabs.jfire.reporting.trade.ui.articlecontainer.detail.action.print.ArticleContainerReportLocaleDialog.dialogMessage")); //$NON-NLS-1$ localesTable = new Table(parent); localesTable.setInput(locales); if (locales.iterator().hasNext()) { Locale locale = locales.iterator().next(); localesTable.setSelectedElements(Collections.singleton(locale)); selectedLocale = locale; } localesTable.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent arg0) { updateOKButtonEnabled(); } }); localesTable.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { selectedLocale = localesTable.getFirstSelectedElement(); if (selectedLocale != null) { okPressed(); } } }); return localesTable; } @Override protected void okPressed() { if (localesTable.getFirstSelectedElement() != null) { selectedLocale = localesTable.getFirstSelectedElement(); super.okPressed(); } } @Override protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); updateOKButtonEnabled(); } private void updateOKButtonEnabled() { if (localesTable != null) { setOKButtonEnabled(localesTable.getFirstSelectedElement() != null); } else { setOKButtonEnabled(false); } } private void setOKButtonEnabled(boolean enabled) { Button button = getButton(IDialogConstants.OK_ID); if (button != null) button.setEnabled(enabled); } public Locale getSelectedLocale() { return selectedLocale; } }